minMatrix.js : translate
構文 : matIV.translate(mat, vec, dest)
引数 : mat > 元となる行列
引数 : vec > 原点からの移動距離を表すベクトル
引数 : dest > 演算結果を格納する行列
モデル変換における移動(座標位置の変更)を行ないます。mat には元となる行列を、vec には X Y Z の各方向への移動量を表すベクトルを渡します。ベクトルは三つの要素を持つ配列として渡します。演算結果は dest に出力されます。
translateを見る
code:js
this.translate = function(mat, vec, dest){
dest0 = mat0; dest1 = mat1; dest2 = mat2; dest3 = mat3; dest4 = mat4; dest5 = mat5; dest6 = mat6; dest7 = mat7; dest12 = mat0 * vec0 + mat4 * vec1 + mat8 * vec2 + mat12; dest13 = mat1 * vec0 + mat5 * vec1 + mat9 * vec2 + mat13; dest14 = mat2 * vec0 + mat6 * vec1 + mat10 * vec2 + mat14; dest15 = mat3 * vec0 + mat7 * vec1 + mat11 * vec2 + mat15; return dest;
};
0から11は要素をコピーしている
12~15の要素は
dest[12] = mat[0]*vec[0] + mat[4]*vec[1] + mat[8] * vec[2] + mat[12];
をみれば
( mat[0], mat[4], mat[8], mat[12] )と
( vec[0], vec[1], vec[2], 1 )のベクトルの内積を計算
行オーダの行列に右から
table:transpose
1,0,0,x
0,1,0,y
0,0,1,z
0,0,0,1
をかけたことになる
(あるいは列オーダなら左から上の行列の転置したものを考える
どちらが正しいかは、この行列にベクトルをかけて利用する側(つまりopenGL側)の仕様に依存する